//
// Created by zengyuhao on 25-4-29.
//

#ifndef ZORAL_PLAN_INTERFACE_H
#define ZORAL_PLAN_INTERFACE_H

#include "model/model_interface.hpp"
#include "plan/plan_data_structure.hpp"
#include "plan/plan_impl/trajectory.hpp"
#include <memory>

namespace ZORAL
{

    class ZoralPlan {
    private:
        std::shared_ptr<ZoralModel> robot_model_;
        int dof_;

    public:
        ZoralPlan(std::shared_ptr<ZoralModel> robot_model)
            : robot_model_(robot_model), dof_(robot_model->getRobotDof()) {}

        int getRobotDof() {
            return robot_model_->getRobotDof();
        }

        int move(const PlannerType &planner_type, const PlannerProperties &properties,
                const std::vector<std::vector<double>> &start_state, const std::vector<std::vector<double>> &end_state,
                Trajectory &traj);
        double getMoveTime(Trajectory traj);
    };

} // namespace ZORAL
#endif // ZORAL_PLAN_INTERFACE_H
